package com.unionpay.config;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import java.util.Timer;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.log4j.Logger;

import com.unionpay.async.AsyncTaskPool;
import com.unionpay.async.NewTimerTask;
import com.unionpay.async.TimerTask;
import com.unionpay.db.Mybaties;
import com.unionpay.db.TblAnchorcofig;
import com.unionpay.db.TblStatusCode;
import com.unionpay.entity.AnchorcofigEntity;
import com.unionpay.util.DateUtil;

/**
 * 默认配置
 * 
 * @author liuzy
 * @since 2016年4月29日
 */
public class Config {
	private static Logger logger = Logger.getLogger(Config.class);

	/**
	 * 公链RPC地址
	 */
	public static String PUBLIC_RPC;

	/**
	 * 公链RPC用户
	 */
	public static String PUBLIC_USER;

	/**
	 * 定时统计任务运行时间
	 */
	//	public static String TIMER_TIME = "00:01";

	/**
	 * 状态码
	 */
	public static ConcurrentHashMap<String, String> statuscodeMap = new ConcurrentHashMap<String, String>();

	/**
	 * 定时器
	 */
	public static ConcurrentHashMap<String, Timer> timerMap = new ConcurrentHashMap<String, Timer>();

	/**
	 * 启动时初始化
	 */
	public static void init(String properties) {
		try {
			logger.info("Config init...");

			Properties p = new Properties();
			InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(properties);
			p.load(in);
			in.close();

			PUBLIC_RPC = p.getProperty("PUBLIC_RPC");
			PUBLIC_USER = p.getProperty("PUBLIC_USER");
//			TIMER_TIME = p.getProperty("TIMER_TIME");

			// 初始化Mybaties
			Mybaties.init(p);

			// 从数据库加载错误码
			statuscodeMap.putAll(TblStatusCode.queryAll());

			// 启动异步任务工作池
			AsyncTaskPool.start();
//
//			// 启动定时统计任务
//			TimerTask.start(TIMER_TIME);
			
			List<AnchorcofigEntity> list=TblAnchorcofig.selectAll();
			for(int i=0;i<list.size();i++){
				AnchorcofigEntity entity=list.get(i);
				int record=0;
				if(entity.getAnchorrecords()!=null && !"".equals(entity.getAnchorrecords())){
					record=Integer.valueOf(entity.getAnchorrecords());
				}
				NewTimerTask.start(entity.getAnchortype(), entity.getBizid(), entity.getAnchorcofigid(), DateUtil.getDateTime(entity.getAnchorstartdate()), entity.getAnchorinterval(),record);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 停止时销毁
	 */
	public static void destroy() {
		logger.info("Config destroy...");

		// 停止异步任务工作池
		AsyncTaskPool.destroy();
		//
		//		// 停止定时统计任务
		//		TimerTask.destroy();
	}
}
